#include<bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<int> smallestK(vector<int>& arr, int k) {
        if(!k)return vector<int>();   //注意这种情况，不加会 re
        priority_queue<int, vector<int>, less<int>> q;
        for(int i = 0; i < k; i++)q.push(arr[i]);
        for(int i = k; i < arr.size(); i++){
            if(arr[i] < q.top()){
                q.pop();
                q.push(arr[i]);
            }
        }
        vector<int> ans;
        while(!q.empty()){
            ans.push_back(q.top());
            q.pop();
        }
        return ans;
    }
};

/**
 * 2021.9.3
 * 用最大堆存前 K 个数，然后依次用更小的数代替已有的 K 个数中最大的。
 */